<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Jetson Inference: Multithreading</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="NVLogo_2D.jpg"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Jetson Inference
   </div>
   <div id="projectbrief">DNN Vision Library</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__threads.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a>  </div>
  <div class="headertitle">
<div class="title">Multithreading<div class="ingroups"><a class="el" href="group__util.html">Utilities Library (jetson-utils)</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="group__threads.html#classMutex" title="A lightweight mutual exclusion lock.">Mutex</a>, events, threads, and process objects based on pthreads.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:classEvent"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#classEvent">Event</a></td></tr>
<tr class="memdesc:classEvent"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> object for signalling other threads.  <a href="group__threads.html#classEvent">More...</a><br /></td></tr>
<tr class="separator:classEvent"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:classMutex"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#classMutex">Mutex</a></td></tr>
<tr class="memdesc:classMutex"><td class="mdescLeft">&#160;</td><td class="mdescRight">A lightweight mutual exclusion lock.  <a href="group__threads.html#classMutex">More...</a><br /></td></tr>
<tr class="separator:classMutex"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:classProcess"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#classProcess">Process</a></td></tr>
<tr class="memdesc:classProcess"><td class="mdescLeft">&#160;</td><td class="mdescRight">Static functions for retrieving information about the running process.  <a href="group__threads.html#classProcess">More...</a><br /></td></tr>
<tr class="separator:classProcess"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:classRingBuffer"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#classRingBuffer">RingBuffer</a></td></tr>
<tr class="memdesc:classRingBuffer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread-safe circular ring buffer queue.  <a href="group__threads.html#classRingBuffer">More...</a><br /></td></tr>
<tr class="separator:classRingBuffer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:classThread"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#classThread">Thread</a></td></tr>
<tr class="memdesc:classThread"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="group__threads.html#classThread" title="Thread class for launching an asynchronous operating-system dependent thread.">Thread</a> class for launching an asynchronous operating-system dependent thread.  <a href="group__threads.html#classThread">More...</a><br /></td></tr>
<tr class="separator:classThread"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaf5d0ae569fdc16f5708d68f64457ed79"><td class="memItemLeft" align="right" valign="top">typedef void *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#gaf5d0ae569fdc16f5708d68f64457ed79">ThreadEntryFunction</a>) (void *user_param)</td></tr>
<tr class="memdesc:gaf5d0ae569fdc16f5708d68f64457ed79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function pointer typedef representing a thread's main entry point.  <a href="group__threads.html#gaf5d0ae569fdc16f5708d68f64457ed79">More...</a><br /></td></tr>
<tr class="separator:gaf5d0ae569fdc16f5708d68f64457ed79"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p><a class="el" href="group__threads.html#classMutex" title="A lightweight mutual exclusion lock.">Mutex</a>, events, threads, and process objects based on pthreads. </p>
<hr/><h2 class="groupheader">Class Documentation</h2>
<a name="classEvent" id="classEvent"></a>
<h2 class="memtitle"><span class="permalink"><a href="#classEvent">&#9670;&nbsp;</a></span>Event</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">class Event</td>
        </tr>
      </table>
</div><div class="memdoc">
<div class="textblock"><p><a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> object for signalling other threads. </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Public Member Functions</h3></td></tr>
<tr class="memitem:a44841bb41f204f03100a2759e7097389"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a44841bb41f204f03100a2759e7097389">Event</a> (bool auto_reset=true)</td></tr>
<tr class="memdesc:a44841bb41f204f03100a2759e7097389"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> constructor.  <a href="group__threads.html#a44841bb41f204f03100a2759e7097389">More...</a><br /></td></tr>
<tr class="separator:a44841bb41f204f03100a2759e7097389"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7704ec01ce91e673885792054214b3d2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a7704ec01ce91e673885792054214b3d2">~Event</a> ()</td></tr>
<tr class="memdesc:a7704ec01ce91e673885792054214b3d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor.  <a href="group__threads.html#a7704ec01ce91e673885792054214b3d2">More...</a><br /></td></tr>
<tr class="separator:a7704ec01ce91e673885792054214b3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86507f584eb0bff8eb7bdb2c280d0c23"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23">Wake</a> ()</td></tr>
<tr class="memdesc:a86507f584eb0bff8eb7bdb2c280d0c23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raise the event.  <a href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23">More...</a><br /></td></tr>
<tr class="separator:a86507f584eb0bff8eb7bdb2c280d0c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afed31be0b4f98fb83163a4d725886e81"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#afed31be0b4f98fb83163a4d725886e81">Reset</a> ()</td></tr>
<tr class="memdesc:afed31be0b4f98fb83163a4d725886e81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the event status to un-raised.  <a href="group__threads.html#afed31be0b4f98fb83163a4d725886e81">More...</a><br /></td></tr>
<tr class="separator:afed31be0b4f98fb83163a4d725886e81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a188ebb92f80c6fae559051b084524fcd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a188ebb92f80c6fae559051b084524fcd">Query</a> ()</td></tr>
<tr class="memdesc:a188ebb92f80c6fae559051b084524fcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Query the status of this event.  <a href="group__threads.html#a188ebb92f80c6fae559051b084524fcd">More...</a><br /></td></tr>
<tr class="separator:a188ebb92f80c6fae559051b084524fcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55398e16a006f6a0ec00de1e75ff6162"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a55398e16a006f6a0ec00de1e75ff6162">Wait</a> ()</td></tr>
<tr class="memdesc:a55398e16a006f6a0ec00de1e75ff6162"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait until this event is raised.  <a href="group__threads.html#a55398e16a006f6a0ec00de1e75ff6162">More...</a><br /></td></tr>
<tr class="separator:a55398e16a006f6a0ec00de1e75ff6162"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab081aad525e1599f9d46cf52df91be4f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ab081aad525e1599f9d46cf52df91be4f">Wait</a> (const timespec &amp;timeout)</td></tr>
<tr class="memdesc:ab081aad525e1599f9d46cf52df91be4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for a specified amount of time until this event is raised or timeout occurs.  <a href="group__threads.html#ab081aad525e1599f9d46cf52df91be4f">More...</a><br /></td></tr>
<tr class="separator:ab081aad525e1599f9d46cf52df91be4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf45a1a49a93de6c9c9d0d8ce3f8b811"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#acf45a1a49a93de6c9c9d0d8ce3f8b811">Wait</a> (uint64_t timeout)</td></tr>
<tr class="memdesc:acf45a1a49a93de6c9c9d0d8ce3f8b811"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for a specified number of milliseconds until this event is raised or timeout occurs.  <a href="group__threads.html#acf45a1a49a93de6c9c9d0d8ce3f8b811">More...</a><br /></td></tr>
<tr class="separator:acf45a1a49a93de6c9c9d0d8ce3f8b811"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c5e80c726452ce485d9baa7cdd8c148"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a7c5e80c726452ce485d9baa7cdd8c148">WaitNs</a> (uint64_t timeout)</td></tr>
<tr class="memdesc:a7c5e80c726452ce485d9baa7cdd8c148"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for a specified number of nanoseconds until this event is raised or timeout occurs.  <a href="group__threads.html#a7c5e80c726452ce485d9baa7cdd8c148">More...</a><br /></td></tr>
<tr class="separator:a7c5e80c726452ce485d9baa7cdd8c148"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a515f66ad3126b7c3b456a10604a40c39"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a515f66ad3126b7c3b456a10604a40c39">WaitUs</a> (uint64_t timeout)</td></tr>
<tr class="memdesc:a515f66ad3126b7c3b456a10604a40c39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for a specified number of microseconds until this event is raised or timeout occurs.  <a href="group__threads.html#a515f66ad3126b7c3b456a10604a40c39">More...</a><br /></td></tr>
<tr class="separator:a515f66ad3126b7c3b456a10604a40c39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a4b6e6bdeb54c96d33c6c886c1ee672"><td class="memItemLeft" align="right" valign="top">pthread_cond_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a7a4b6e6bdeb54c96d33c6c886c1ee672">GetID</a> ()</td></tr>
<tr class="memdesc:a7a4b6e6bdeb54c96d33c6c886c1ee672"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the <a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> object.  <a href="group__threads.html#a7a4b6e6bdeb54c96d33c6c886c1ee672">More...</a><br /></td></tr>
<tr class="separator:a7a4b6e6bdeb54c96d33c6c886c1ee672"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Protected Attributes</h3></td></tr>
<tr class="memitem:ae11735d4e337daa14050ddb84d6253d2"><td class="memItemLeft" align="right" valign="top">pthread_cond_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ae11735d4e337daa14050ddb84d6253d2">mID</a></td></tr>
<tr class="separator:ae11735d4e337daa14050ddb84d6253d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67ed51a825c8901e9e4f144c1a636475"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__threads.html#classMutex">Mutex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a67ed51a825c8901e9e4f144c1a636475">mQueryMutex</a></td></tr>
<tr class="separator:a67ed51a825c8901e9e4f144c1a636475"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa07a3222402d83bf1d6d817c0b2835ff"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#aa07a3222402d83bf1d6d817c0b2835ff">mQuery</a></td></tr>
<tr class="separator:aa07a3222402d83bf1d6d817c0b2835ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3827c7366d7f1c7139ba10555827ed30"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a3827c7366d7f1c7139ba10555827ed30">mAutoReset</a></td></tr>
<tr class="separator:a3827c7366d7f1c7139ba10555827ed30"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Constructor &amp; Destructor Documentation</h4>
<a id="a44841bb41f204f03100a2759e7097389"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44841bb41f204f03100a2759e7097389">&#9670;&nbsp;</a></span>Event()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Event::Event </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>auto_reset</em> = <code>true</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p><a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> constructor. </p>
<p>By default, it will automatically be reset when it's raised. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">auto_reset</td><td>Once this event has been raised, should it automatically be reset? </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a7704ec01ce91e673885792054214b3d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7704ec01ce91e673885792054214b3d2">&#9670;&nbsp;</a></span>~Event()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Event::~Event </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Destructor. </p>

</div>
</div>
<h4 class="groupheader">Member Function Documentation</h4>
<a id="a7a4b6e6bdeb54c96d33c6c886c1ee672"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a4b6e6bdeb54c96d33c6c886c1ee672">&#9670;&nbsp;</a></span>GetID()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_cond_t* Event::GetID </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the <a class="el" href="group__threads.html#classEvent" title="Event object for signalling other threads.">Event</a> object. </p>

</div>
</div>
<a id="a188ebb92f80c6fae559051b084524fcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a188ebb92f80c6fae559051b084524fcd">&#9670;&nbsp;</a></span>Query()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::Query </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Query the status of this event. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the event is raised, false if not. </dd></dl>

</div>
</div>
<a id="afed31be0b4f98fb83163a4d725886e81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afed31be0b4f98fb83163a4d725886e81">&#9670;&nbsp;</a></span>Reset()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Event::Reset </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Reset the event status to un-raised. </p>

</div>
</div>
<a id="a55398e16a006f6a0ec00de1e75ff6162"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a55398e16a006f6a0ec00de1e75ff6162">&#9670;&nbsp;</a></span>Wait() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::Wait </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait until this event is raised. </p>
<p>It is likely this will block this thread (and will never timeout). </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23" title="Raise the event.">Wake</a> </dd></dl>

</div>
</div>
<a id="ab081aad525e1599f9d46cf52df91be4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab081aad525e1599f9d46cf52df91be4f">&#9670;&nbsp;</a></span>Wait() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::Wait </td>
          <td>(</td>
          <td class="paramtype">const timespec &amp;&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait for a specified amount of time until this event is raised or timeout occurs. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23" title="Raise the event.">Wake</a> </dd></dl>

</div>
</div>
<a id="acf45a1a49a93de6c9c9d0d8ce3f8b811"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf45a1a49a93de6c9c9d0d8ce3f8b811">&#9670;&nbsp;</a></span>Wait() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::Wait </td>
          <td>(</td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait for a specified number of milliseconds until this event is raised or timeout occurs. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23" title="Raise the event.">Wake</a> </dd></dl>

</div>
</div>
<a id="a7c5e80c726452ce485d9baa7cdd8c148"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c5e80c726452ce485d9baa7cdd8c148">&#9670;&nbsp;</a></span>WaitNs()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::WaitNs </td>
          <td>(</td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait for a specified number of nanoseconds until this event is raised or timeout occurs. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23" title="Raise the event.">Wake</a> </dd></dl>

</div>
</div>
<a id="a515f66ad3126b7c3b456a10604a40c39"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a515f66ad3126b7c3b456a10604a40c39">&#9670;&nbsp;</a></span>WaitUs()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::WaitUs </td>
          <td>(</td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait for a specified number of microseconds until this event is raised or timeout occurs. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__threads.html#a86507f584eb0bff8eb7bdb2c280d0c23" title="Raise the event.">Wake</a> </dd></dl>

</div>
</div>
<a id="a86507f584eb0bff8eb7bdb2c280d0c23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86507f584eb0bff8eb7bdb2c280d0c23">&#9670;&nbsp;</a></span>Wake()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Event::Wake </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Raise the event. </p>
<p>Any threads waiting on this event will be woken up. </p>

</div>
</div>
<h4 class="groupheader">Member Data Documentation</h4>
<a id="a3827c7366d7f1c7139ba10555827ed30"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3827c7366d7f1c7139ba10555827ed30">&#9670;&nbsp;</a></span>mAutoReset</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::mAutoReset</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ae11735d4e337daa14050ddb84d6253d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae11735d4e337daa14050ddb84d6253d2">&#9670;&nbsp;</a></span>mID</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_cond_t Event::mID</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="aa07a3222402d83bf1d6d817c0b2835ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa07a3222402d83bf1d6d817c0b2835ff">&#9670;&nbsp;</a></span>mQuery</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Event::mQuery</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a67ed51a825c8901e9e4f144c1a636475"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67ed51a825c8901e9e4f144c1a636475">&#9670;&nbsp;</a></span>mQueryMutex</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__threads.html#classMutex">Mutex</a> Event::mQueryMutex</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>

</div>
</div>
<a name="classMutex" id="classMutex"></a>
<h2 class="memtitle"><span class="permalink"><a href="#classMutex">&#9670;&nbsp;</a></span>Mutex</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">class Mutex</td>
        </tr>
      </table>
</div><div class="memdoc">
<div class="textblock"><p>A lightweight mutual exclusion lock. </p>
<p>It is very fast to check if the mutex is available, lock it, and release it. However, if the mutex is unavailable when you attempt to lock it, execution of the thread will stop until it becomes available. </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Public Member Functions</h3></td></tr>
<tr class="memitem:a593423d868daf926c7b0d63a833ae29a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a593423d868daf926c7b0d63a833ae29a">Mutex</a> ()</td></tr>
<tr class="memdesc:a593423d868daf926c7b0d63a833ae29a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="group__threads.html#a593423d868daf926c7b0d63a833ae29a">More...</a><br /></td></tr>
<tr class="separator:a593423d868daf926c7b0d63a833ae29a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9e9182407f5f74892318607888e9be4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ac9e9182407f5f74892318607888e9be4">~Mutex</a> ()</td></tr>
<tr class="memdesc:ac9e9182407f5f74892318607888e9be4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor.  <a href="group__threads.html#ac9e9182407f5f74892318607888e9be4">More...</a><br /></td></tr>
<tr class="separator:ac9e9182407f5f74892318607888e9be4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87f92bea41231778680c392668b4ad6f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a87f92bea41231778680c392668b4ad6f">AttemptLock</a> ()</td></tr>
<tr class="memdesc:a87f92bea41231778680c392668b4ad6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">If the lock is free, aquire it.  <a href="group__threads.html#a87f92bea41231778680c392668b4ad6f">More...</a><br /></td></tr>
<tr class="separator:a87f92bea41231778680c392668b4ad6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5cb54c9c45f90e29206d5679a3b1c7f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ae5cb54c9c45f90e29206d5679a3b1c7f">Lock</a> ()</td></tr>
<tr class="memdesc:ae5cb54c9c45f90e29206d5679a3b1c7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Aquire the lock, whenever it becomes available.  <a href="group__threads.html#ae5cb54c9c45f90e29206d5679a3b1c7f">More...</a><br /></td></tr>
<tr class="separator:ae5cb54c9c45f90e29206d5679a3b1c7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5de61abafec4bbec4cd7e796e5209fd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ad5de61abafec4bbec4cd7e796e5209fd">Unlock</a> ()</td></tr>
<tr class="memdesc:ad5de61abafec4bbec4cd7e796e5209fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release the lock.  <a href="group__threads.html#ad5de61abafec4bbec4cd7e796e5209fd">More...</a><br /></td></tr>
<tr class="separator:ad5de61abafec4bbec4cd7e796e5209fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fce312e70fb4d09af9436d4e5912f7e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a5fce312e70fb4d09af9436d4e5912f7e">Sync</a> ()</td></tr>
<tr class="memdesc:a5fce312e70fb4d09af9436d4e5912f7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait for the lock, then release it immediately.  <a href="group__threads.html#a5fce312e70fb4d09af9436d4e5912f7e">More...</a><br /></td></tr>
<tr class="separator:a5fce312e70fb4d09af9436d4e5912f7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d62eeb42273e4f4946ebf8a757db4c9"><td class="memItemLeft" align="right" valign="top">pthread_mutex_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a7d62eeb42273e4f4946ebf8a757db4c9">GetID</a> ()</td></tr>
<tr class="memdesc:a7d62eeb42273e4f4946ebf8a757db4c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the mutex object.  <a href="group__threads.html#a7d62eeb42273e4f4946ebf8a757db4c9">More...</a><br /></td></tr>
<tr class="separator:a7d62eeb42273e4f4946ebf8a757db4c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Protected Attributes</h3></td></tr>
<tr class="memitem:a8fc19c03aa404e9efddc2c91132ebd02"><td class="memItemLeft" align="right" valign="top">pthread_mutex_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a8fc19c03aa404e9efddc2c91132ebd02">mID</a></td></tr>
<tr class="separator:a8fc19c03aa404e9efddc2c91132ebd02"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Constructor &amp; Destructor Documentation</h4>
<a id="a593423d868daf926c7b0d63a833ae29a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a593423d868daf926c7b0d63a833ae29a">&#9670;&nbsp;</a></span>Mutex()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Mutex::Mutex </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructor. </p>

</div>
</div>
<a id="ac9e9182407f5f74892318607888e9be4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9e9182407f5f74892318607888e9be4">&#9670;&nbsp;</a></span>~Mutex()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Mutex::~Mutex </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Destructor. </p>

</div>
</div>
<h4 class="groupheader">Member Function Documentation</h4>
<a id="a87f92bea41231778680c392668b4ad6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87f92bea41231778680c392668b4ad6f">&#9670;&nbsp;</a></span>AttemptLock()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Mutex::AttemptLock </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>If the lock is free, aquire it. </p>
<p>Otherwise, return without waiting for it to become available. </p><dl class="section return"><dt>Returns</dt><dd>True if the lock was aquired, false if not. </dd></dl>

</div>
</div>
<a id="a7d62eeb42273e4f4946ebf8a757db4c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d62eeb42273e4f4946ebf8a757db4c9">&#9670;&nbsp;</a></span>GetID()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_mutex_t* Mutex::GetID </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the mutex object. </p>

</div>
</div>
<a id="ae5cb54c9c45f90e29206d5679a3b1c7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5cb54c9c45f90e29206d5679a3b1c7f">&#9670;&nbsp;</a></span>Lock()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Mutex::Lock </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Aquire the lock, whenever it becomes available. </p>
<p>This could mean just a few instructions if the lock is already free, or to block the thread if it isn't. </p>

</div>
</div>
<a id="a5fce312e70fb4d09af9436d4e5912f7e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5fce312e70fb4d09af9436d4e5912f7e">&#9670;&nbsp;</a></span>Sync()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Mutex::Sync </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Wait for the lock, then release it immediately. </p>
<p>Use this in situations where you are waiting for an event to occur. </p>

</div>
</div>
<a id="ad5de61abafec4bbec4cd7e796e5209fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5de61abafec4bbec4cd7e796e5209fd">&#9670;&nbsp;</a></span>Unlock()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Mutex::Unlock </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Release the lock. </p>

</div>
</div>
<h4 class="groupheader">Member Data Documentation</h4>
<a id="a8fc19c03aa404e9efddc2c91132ebd02"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8fc19c03aa404e9efddc2c91132ebd02">&#9670;&nbsp;</a></span>mID</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_mutex_t Mutex::mID</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>

</div>
</div>
<a name="classProcess" id="classProcess"></a>
<h2 class="memtitle"><span class="permalink"><a href="#classProcess">&#9670;&nbsp;</a></span>Process</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">class Process</td>
        </tr>
      </table>
</div><div class="memdoc">
<div class="textblock"><p>Static functions for retrieving information about the running process. </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Static Public Member Functions</h3></td></tr>
<tr class="memitem:a3ff55cfccbce147e6671c9e6418d36ca"><td class="memItemLeft" align="right" valign="top">static pid_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a3ff55cfccbce147e6671c9e6418d36ca">GetID</a> ()</td></tr>
<tr class="memdesc:a3ff55cfccbce147e6671c9e6418d36ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get this process ID (PID)  <a href="group__threads.html#a3ff55cfccbce147e6671c9e6418d36ca">More...</a><br /></td></tr>
<tr class="separator:a3ff55cfccbce147e6671c9e6418d36ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a3dcecc6f8681fd5d7ffe2b50573964"><td class="memItemLeft" align="right" valign="top">static pid_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a8a3dcecc6f8681fd5d7ffe2b50573964">GetParentID</a> ()</td></tr>
<tr class="memdesc:a8a3dcecc6f8681fd5d7ffe2b50573964"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the parent's process ID.  <a href="group__threads.html#a8a3dcecc6f8681fd5d7ffe2b50573964">More...</a><br /></td></tr>
<tr class="separator:a8a3dcecc6f8681fd5d7ffe2b50573964"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ab81e8c877259835e4b787ab94349cf"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a2ab81e8c877259835e4b787ab94349cf">GetCommandLine</a> (pid_t pid=-1)</td></tr>
<tr class="memdesc:a2ab81e8c877259835e4b787ab94349cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the command line of the process with the specified PID, or of this calling process if PID is -1 (which is the default).  <a href="group__threads.html#a2ab81e8c877259835e4b787ab94349cf">More...</a><br /></td></tr>
<tr class="separator:a2ab81e8c877259835e4b787ab94349cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3c3cafcee38a25bd317b74a770814a3"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#af3c3cafcee38a25bd317b74a770814a3">GetExecutablePath</a> (pid_t pid=-1)</td></tr>
<tr class="memdesc:af3c3cafcee38a25bd317b74a770814a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the absolute path of the process with the specified PID, or of this calling process if PID is -1 (which is the default).  <a href="group__threads.html#af3c3cafcee38a25bd317b74a770814a3">More...</a><br /></td></tr>
<tr class="separator:af3c3cafcee38a25bd317b74a770814a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac86c2f8d6bf4a9a72d1b9d18624a86a3"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ac86c2f8d6bf4a9a72d1b9d18624a86a3">GetExecutableDir</a> (pid_t pid=-1)</td></tr>
<tr class="memdesc:ac86c2f8d6bf4a9a72d1b9d18624a86a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the directory that the process executable resides in.  <a href="group__threads.html#ac86c2f8d6bf4a9a72d1b9d18624a86a3">More...</a><br /></td></tr>
<tr class="separator:ac86c2f8d6bf4a9a72d1b9d18624a86a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb5d6970a0c95eb6aa0421bb0091e490"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#abb5d6970a0c95eb6aa0421bb0091e490">GetWorkingDir</a> (pid_t pid=-1)</td></tr>
<tr class="memdesc:abb5d6970a0c95eb6aa0421bb0091e490"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve the current working directory of the process.  <a href="group__threads.html#abb5d6970a0c95eb6aa0421bb0091e490">More...</a><br /></td></tr>
<tr class="separator:abb5d6970a0c95eb6aa0421bb0091e490"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a6f7a84cc7dad846cda863fbc28354b"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a6a6f7a84cc7dad846cda863fbc28354b">Fork</a> ()</td></tr>
<tr class="memdesc:a6a6f7a84cc7dad846cda863fbc28354b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Duplicate the calling process.  <a href="group__threads.html#a6a6f7a84cc7dad846cda863fbc28354b">More...</a><br /></td></tr>
<tr class="separator:a6a6f7a84cc7dad846cda863fbc28354b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Member Function Documentation</h4>
<a id="a6a6f7a84cc7dad846cda863fbc28354b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6a6f7a84cc7dad846cda863fbc28354b">&#9670;&nbsp;</a></span>Fork()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void Process::Fork </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Duplicate the calling process. </p>

</div>
</div>
<a id="a2ab81e8c877259835e4b787ab94349cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ab81e8c877259835e4b787ab94349cf">&#9670;&nbsp;</a></span>GetCommandLine()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static std::string Process::GetCommandLine </td>
          <td>(</td>
          <td class="paramtype">pid_t&#160;</td>
          <td class="paramname"><em>pid</em> = <code>-1</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Retrieve the command line of the process with the specified PID, or of this calling process if PID is -1 (which is the default). </p>

</div>
</div>
<a id="ac86c2f8d6bf4a9a72d1b9d18624a86a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac86c2f8d6bf4a9a72d1b9d18624a86a3">&#9670;&nbsp;</a></span>GetExecutableDir()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static std::string Process::GetExecutableDir </td>
          <td>(</td>
          <td class="paramtype">pid_t&#160;</td>
          <td class="paramname"><em>pid</em> = <code>-1</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Retrieve the directory that the process executable resides in. </p>
<p>For example, if the process executable is located at <code>/usr/bin/exe</code>, then <code><a class="el" href="group__threads.html#ac86c2f8d6bf4a9a72d1b9d18624a86a3" title="Retrieve the directory that the process executable resides in.">GetExecutableDir()</a></code> would return the path <code>/usr/bin</code>. If the specified PID is -1, then the calling process will be used. </p>

</div>
</div>
<a id="af3c3cafcee38a25bd317b74a770814a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3c3cafcee38a25bd317b74a770814a3">&#9670;&nbsp;</a></span>GetExecutablePath()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static std::string Process::GetExecutablePath </td>
          <td>(</td>
          <td class="paramtype">pid_t&#160;</td>
          <td class="paramname"><em>pid</em> = <code>-1</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Retrieve the absolute path of the process with the specified PID, or of this calling process if PID is -1 (which is the default). </p>
<p>This path will include the process' filename. </p>

</div>
</div>
<a id="a3ff55cfccbce147e6671c9e6418d36ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ff55cfccbce147e6671c9e6418d36ca">&#9670;&nbsp;</a></span>GetID()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static pid_t Process::GetID </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get this process ID (PID) </p>

</div>
</div>
<a id="a8a3dcecc6f8681fd5d7ffe2b50573964"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a3dcecc6f8681fd5d7ffe2b50573964">&#9670;&nbsp;</a></span>GetParentID()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static pid_t Process::GetParentID </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the parent's process ID. </p>

</div>
</div>
<a id="abb5d6970a0c95eb6aa0421bb0091e490"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb5d6970a0c95eb6aa0421bb0091e490">&#9670;&nbsp;</a></span>GetWorkingDir()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static std::string Process::GetWorkingDir </td>
          <td>(</td>
          <td class="paramtype">pid_t&#160;</td>
          <td class="paramname"><em>pid</em> = <code>-1</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Retrieve the current working directory of the process. </p>
<p>If the specified PID is -1, then the calling process will be used. </p>

</div>
</div>

</div>
</div>
<a name="classRingBuffer" id="classRingBuffer"></a>
<h2 class="memtitle"><span class="permalink"><a href="#classRingBuffer">&#9670;&nbsp;</a></span>RingBuffer</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">class RingBuffer</td>
        </tr>
      </table>
</div><div class="memdoc">
<div class="textblock"><p>Thread-safe circular ring buffer queue. </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Public Types</h3></td></tr>
<tr class="memitem:add028ff4436a9c7467ea5df2d81623a4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4">Flags</a> { <br />
&#160;&#160;<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4ae7368f8f66751388d6eca8acab34e8b2">Read</a> = (1 &lt;&lt; 0), 
<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a5d7fba78a3b416422add48911552b788">ReadOnce</a> = (1 &lt;&lt; 1) | Read, 
<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a618d08b68f28a0deebc922c4fd29b150">ReadLatest</a> = (1 &lt;&lt; 2) | Read, 
<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a016f5aaf642491df7dd14d2728b38973">ReadLatestOnce</a> = (1 &lt;&lt; 3) | ReadLatest, 
<br />
&#160;&#160;<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4aa40fc1352f6c1c44e21d12a856cd9e35">Write</a> = (1 &lt;&lt; 4), 
<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a1118d6f9d4da6a8b6fbc5d6de4c093e9">Threaded</a> = (1 &lt;&lt; 5), 
<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a5a1ff357668813e74eb7656cc035f91e">ZeroCopy</a> = (1 &lt;&lt; 6)
<br />
 }</td></tr>
<tr class="memdesc:add028ff4436a9c7467ea5df2d81623a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Ring buffer flags.  <a href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4">More...</a><br /></td></tr>
<tr class="separator:add028ff4436a9c7467ea5df2d81623a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Public Member Functions</h3></td></tr>
<tr class="memitem:ae18d0a5ac60eb4db2f99887772ed5778"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ae18d0a5ac60eb4db2f99887772ed5778">RingBuffer</a> (uint32_t flags=<a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a1118d6f9d4da6a8b6fbc5d6de4c093e9">Threaded</a>)</td></tr>
<tr class="memdesc:ae18d0a5ac60eb4db2f99887772ed5778"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new ring buffer.  <a href="group__threads.html#ae18d0a5ac60eb4db2f99887772ed5778">More...</a><br /></td></tr>
<tr class="separator:ae18d0a5ac60eb4db2f99887772ed5778"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2715b2e99ea24521ef7a586c2f33e1c9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a2715b2e99ea24521ef7a586c2f33e1c9">~RingBuffer</a> ()</td></tr>
<tr class="memdesc:a2715b2e99ea24521ef7a586c2f33e1c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor.  <a href="group__threads.html#a2715b2e99ea24521ef7a586c2f33e1c9">More...</a><br /></td></tr>
<tr class="separator:a2715b2e99ea24521ef7a586c2f33e1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41718c1a3577dee2d0f7cfea02667535"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a41718c1a3577dee2d0f7cfea02667535">Alloc</a> (uint32_t numBuffers, size_t size, uint32_t flags=0)</td></tr>
<tr class="memdesc:a41718c1a3577dee2d0f7cfea02667535"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate memory for a set of buffers, where each buffer has the specified size.  <a href="group__threads.html#a41718c1a3577dee2d0f7cfea02667535">More...</a><br /></td></tr>
<tr class="separator:a41718c1a3577dee2d0f7cfea02667535"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a787fdb833c95a386e6ec3e19fb6d1fd8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a787fdb833c95a386e6ec3e19fb6d1fd8">Free</a> ()</td></tr>
<tr class="memdesc:a787fdb833c95a386e6ec3e19fb6d1fd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free the buffer allocations.  <a href="group__threads.html#a787fdb833c95a386e6ec3e19fb6d1fd8">More...</a><br /></td></tr>
<tr class="separator:a787fdb833c95a386e6ec3e19fb6d1fd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65cd66112df93d973d7425295c382055"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a65cd66112df93d973d7425295c382055">Peek</a> (uint32_t flags)</td></tr>
<tr class="memdesc:a65cd66112df93d973d7425295c382055"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next read/write buffer without advancing the position in the queue.  <a href="group__threads.html#a65cd66112df93d973d7425295c382055">More...</a><br /></td></tr>
<tr class="separator:a65cd66112df93d973d7425295c382055"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc642b75c7ebe3aa48da4ece8f13643b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#adc642b75c7ebe3aa48da4ece8f13643b">Next</a> (uint32_t flags)</td></tr>
<tr class="memdesc:adc642b75c7ebe3aa48da4ece8f13643b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the next read/write buffer and advance the position in the queue.  <a href="group__threads.html#adc642b75c7ebe3aa48da4ece8f13643b">More...</a><br /></td></tr>
<tr class="separator:adc642b75c7ebe3aa48da4ece8f13643b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13c5161ed54ede296a4c5f079fbaface"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a13c5161ed54ede296a4c5f079fbaface">GetFlags</a> () const</td></tr>
<tr class="memdesc:a13c5161ed54ede296a4c5f079fbaface"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the flags of the ring buffer.  <a href="group__threads.html#a13c5161ed54ede296a4c5f079fbaface">More...</a><br /></td></tr>
<tr class="separator:a13c5161ed54ede296a4c5f079fbaface"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9066deaa7cee206d7f604a443766955"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ab9066deaa7cee206d7f604a443766955">SetFlags</a> (uint32_t flags)</td></tr>
<tr class="memdesc:ab9066deaa7cee206d7f604a443766955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the ring buffer's flags.  <a href="group__threads.html#ab9066deaa7cee206d7f604a443766955">More...</a><br /></td></tr>
<tr class="separator:ab9066deaa7cee206d7f604a443766955"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a39008053c6aa06e348fa5b2ead2f91"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a1a39008053c6aa06e348fa5b2ead2f91">SetThreaded</a> (bool threaded)</td></tr>
<tr class="memdesc:a1a39008053c6aa06e348fa5b2ead2f91"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable or disable multi-threading.  <a href="group__threads.html#a1a39008053c6aa06e348fa5b2ead2f91">More...</a><br /></td></tr>
<tr class="separator:a1a39008053c6aa06e348fa5b2ead2f91"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Protected Attributes</h3></td></tr>
<tr class="memitem:a884afb997bffaf51d550e88d97e062d2"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a884afb997bffaf51d550e88d97e062d2">mNumBuffers</a></td></tr>
<tr class="separator:a884afb997bffaf51d550e88d97e062d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2322c263d4e1e928848ff4c33893713"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ab2322c263d4e1e928848ff4c33893713">mLatestRead</a></td></tr>
<tr class="separator:ab2322c263d4e1e928848ff4c33893713"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a767436a25c53cfb845f731e0ff633120"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a767436a25c53cfb845f731e0ff633120">mLatestWrite</a></td></tr>
<tr class="separator:a767436a25c53cfb845f731e0ff633120"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3177dcbe1bf1a936e810a709361df94"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#aa3177dcbe1bf1a936e810a709361df94">mFlags</a></td></tr>
<tr class="separator:aa3177dcbe1bf1a936e810a709361df94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1828b9679d7da6caaa486b2bca487d42"><td class="memItemLeft" align="right" valign="top">void **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a1828b9679d7da6caaa486b2bca487d42">mBuffers</a></td></tr>
<tr class="separator:a1828b9679d7da6caaa486b2bca487d42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5025680071ca78b1e204d4931d2a70cd"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a5025680071ca78b1e204d4931d2a70cd">mBufferSize</a></td></tr>
<tr class="separator:a5025680071ca78b1e204d4931d2a70cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a52c369f6697dea2696e0b4b9be08b622"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a52c369f6697dea2696e0b4b9be08b622">mReadOnce</a></td></tr>
<tr class="separator:a52c369f6697dea2696e0b4b9be08b622"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8fadecc95016c471104fbadb1b0e9f3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__threads.html#classMutex">Mutex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ad8fadecc95016c471104fbadb1b0e9f3">mMutex</a></td></tr>
<tr class="separator:ad8fadecc95016c471104fbadb1b0e9f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Member Enumeration Documentation</h4>
<a id="add028ff4436a9c7467ea5df2d81623a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add028ff4436a9c7467ea5df2d81623a4">&#9670;&nbsp;</a></span>Flags</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4">RingBuffer::Flags</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Ring buffer flags. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4ae7368f8f66751388d6eca8acab34e8b2"></a>Read&#160;</td><td class="fielddoc"><p>Read the next buffer. </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4a5d7fba78a3b416422add48911552b788"></a>ReadOnce&#160;</td><td class="fielddoc"><p>Read the next buffer, but only if it hasn't been read before. </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4a618d08b68f28a0deebc922c4fd29b150"></a>ReadLatest&#160;</td><td class="fielddoc"><p>Read the latest buffer in the queue, skipping other buffers that may not have been read. </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4a016f5aaf642491df7dd14d2728b38973"></a>ReadLatestOnce&#160;</td><td class="fielddoc"><p>Combination of ReadOnce and ReadLatest flags. </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4aa40fc1352f6c1c44e21d12a856cd9e35"></a>Write&#160;</td><td class="fielddoc"><p>Write the next buffer. </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4a1118d6f9d4da6a8b6fbc5d6de4c093e9"></a>Threaded&#160;</td><td class="fielddoc"><p>Buffers should be thread-safe (enabled by default). </p>
</td></tr>
<tr><td class="fieldname"><a id="add028ff4436a9c7467ea5df2d81623a4a5a1ff357668813e74eb7656cc035f91e"></a>ZeroCopy&#160;</td><td class="fielddoc"><p>Buffers should be allocated in mapped CPU/GPU zeroCopy memory (otherwise GPU only) </p>
</td></tr>
</table>

</div>
</div>
<h4 class="groupheader">Constructor &amp; Destructor Documentation</h4>
<a id="ae18d0a5ac60eb4db2f99887772ed5778"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae18d0a5ac60eb4db2f99887772ed5778">&#9670;&nbsp;</a></span>RingBuffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">RingBuffer::RingBuffer </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>flags</em> = <code><a class="el" href="group__threads.html#add028ff4436a9c7467ea5df2d81623a4a1118d6f9d4da6a8b6fbc5d6de4c093e9">Threaded</a></code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Construct a new ring buffer. </p>

</div>
</div>
<a id="a2715b2e99ea24521ef7a586c2f33e1c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2715b2e99ea24521ef7a586c2f33e1c9">&#9670;&nbsp;</a></span>~RingBuffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">RingBuffer::~RingBuffer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Destructor. </p>

</div>
</div>
<h4 class="groupheader">Member Function Documentation</h4>
<a id="a41718c1a3577dee2d0f7cfea02667535"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41718c1a3577dee2d0f7cfea02667535">&#9670;&nbsp;</a></span>Alloc()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool RingBuffer::Alloc </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>numBuffers</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>flags</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Allocate memory for a set of buffers, where each buffer has the specified size. </p>
<p>If the requested allocation is compatible with what was already allocated, this will return <code>true</code> without performing additional allocations. Otherwise, the previous buffers are released and new ones are allocated.</p>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> if the allocations succeeded or was previously done. <code>false</code> if a memory allocation error occurred. </dd></dl>

</div>
</div>
<a id="a787fdb833c95a386e6ec3e19fb6d1fd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a787fdb833c95a386e6ec3e19fb6d1fd8">&#9670;&nbsp;</a></span>Free()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void RingBuffer::Free </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Free the buffer allocations. </p>

</div>
</div>
<a id="a13c5161ed54ede296a4c5f079fbaface"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13c5161ed54ede296a4c5f079fbaface">&#9670;&nbsp;</a></span>GetFlags()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t RingBuffer::GetFlags </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the flags of the ring buffer. </p>

</div>
</div>
<a id="adc642b75c7ebe3aa48da4ece8f13643b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc642b75c7ebe3aa48da4ece8f13643b">&#9670;&nbsp;</a></span>Next()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void* RingBuffer::Next </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>flags</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the next read/write buffer and advance the position in the queue. </p>

</div>
</div>
<a id="a65cd66112df93d973d7425295c382055"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65cd66112df93d973d7425295c382055">&#9670;&nbsp;</a></span>Peek()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void* RingBuffer::Peek </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>flags</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the next read/write buffer without advancing the position in the queue. </p>

</div>
</div>
<a id="ab9066deaa7cee206d7f604a443766955"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9066deaa7cee206d7f604a443766955">&#9670;&nbsp;</a></span>SetFlags()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void RingBuffer::SetFlags </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>flags</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the ring buffer's flags. </p>

</div>
</div>
<a id="a1a39008053c6aa06e348fa5b2ead2f91"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a39008053c6aa06e348fa5b2ead2f91">&#9670;&nbsp;</a></span>SetThreaded()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void RingBuffer::SetThreaded </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>threaded</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable or disable multi-threading. </p>

</div>
</div>
<h4 class="groupheader">Member Data Documentation</h4>
<a id="a1828b9679d7da6caaa486b2bca487d42"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1828b9679d7da6caaa486b2bca487d42">&#9670;&nbsp;</a></span>mBuffers</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void** RingBuffer::mBuffers</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a5025680071ca78b1e204d4931d2a70cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5025680071ca78b1e204d4931d2a70cd">&#9670;&nbsp;</a></span>mBufferSize</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t RingBuffer::mBufferSize</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="aa3177dcbe1bf1a936e810a709361df94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3177dcbe1bf1a936e810a709361df94">&#9670;&nbsp;</a></span>mFlags</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t RingBuffer::mFlags</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ab2322c263d4e1e928848ff4c33893713"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab2322c263d4e1e928848ff4c33893713">&#9670;&nbsp;</a></span>mLatestRead</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t RingBuffer::mLatestRead</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a767436a25c53cfb845f731e0ff633120"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a767436a25c53cfb845f731e0ff633120">&#9670;&nbsp;</a></span>mLatestWrite</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t RingBuffer::mLatestWrite</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ad8fadecc95016c471104fbadb1b0e9f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8fadecc95016c471104fbadb1b0e9f3">&#9670;&nbsp;</a></span>mMutex</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__threads.html#classMutex">Mutex</a> RingBuffer::mMutex</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a884afb997bffaf51d550e88d97e062d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a884afb997bffaf51d550e88d97e062d2">&#9670;&nbsp;</a></span>mNumBuffers</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t RingBuffer::mNumBuffers</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a52c369f6697dea2696e0b4b9be08b622"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52c369f6697dea2696e0b4b9be08b622">&#9670;&nbsp;</a></span>mReadOnce</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool RingBuffer::mReadOnce</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>

</div>
</div>
<a name="classThread" id="classThread"></a>
<h2 class="memtitle"><span class="permalink"><a href="#classThread">&#9670;&nbsp;</a></span>Thread</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">class Thread</td>
        </tr>
      </table>
</div><div class="memdoc">
<div class="textblock"><p><a class="el" href="group__threads.html#classThread" title="Thread class for launching an asynchronous operating-system dependent thread.">Thread</a> class for launching an asynchronous operating-system dependent thread. </p>
<p>To make your own thread, provide a function pointer of the thread's entry point, or inherit from this class and implement your own <a class="el" href="group__threads.html#ac852bc49c5bf8c2f448e4df85b1a4cae" title="User-implemented thread main() function.">Run()</a> function. </p>
</div><table class="memberdecls">
<tr><td colspan="2"><h3>Public Member Functions</h3></td></tr>
<tr class="memitem:a95c703fb8f2f27cb64f475a8c940864a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a95c703fb8f2f27cb64f475a8c940864a">Thread</a> ()</td></tr>
<tr class="memdesc:a95c703fb8f2f27cb64f475a8c940864a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor.  <a href="group__threads.html#a95c703fb8f2f27cb64f475a8c940864a">More...</a><br /></td></tr>
<tr class="separator:a95c703fb8f2f27cb64f475a8c940864a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a026b23628e1727050e864e00489c0baf"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a026b23628e1727050e864e00489c0baf">~Thread</a> ()</td></tr>
<tr class="memdesc:a026b23628e1727050e864e00489c0baf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor.  <a href="group__threads.html#a026b23628e1727050e864e00489c0baf">More...</a><br /></td></tr>
<tr class="separator:a026b23628e1727050e864e00489c0baf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac852bc49c5bf8c2f448e4df85b1a4cae"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ac852bc49c5bf8c2f448e4df85b1a4cae">Run</a> ()</td></tr>
<tr class="memdesc:ac852bc49c5bf8c2f448e4df85b1a4cae"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-implemented thread main() function.  <a href="group__threads.html#ac852bc49c5bf8c2f448e4df85b1a4cae">More...</a><br /></td></tr>
<tr class="separator:ac852bc49c5bf8c2f448e4df85b1a4cae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a279c2b78aa2bf43371f2462623588830"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a279c2b78aa2bf43371f2462623588830">Start</a> ()</td></tr>
<tr class="memdesc:a279c2b78aa2bf43371f2462623588830"><td class="mdescLeft">&#160;</td><td class="mdescRight">Start the thread.  <a href="group__threads.html#a279c2b78aa2bf43371f2462623588830">More...</a><br /></td></tr>
<tr class="separator:a279c2b78aa2bf43371f2462623588830"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af729f1405c5c2a4fb43bc5f4d249bedf"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#af729f1405c5c2a4fb43bc5f4d249bedf">Start</a> (<a class="el" href="group__threads.html#gaf5d0ae569fdc16f5708d68f64457ed79">ThreadEntryFunction</a> entry, void *user_param=NULL)</td></tr>
<tr class="memdesc:af729f1405c5c2a4fb43bc5f4d249bedf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Start the thread, utilizing an entry function pointer provided by the user.  <a href="group__threads.html#af729f1405c5c2a4fb43bc5f4d249bedf">More...</a><br /></td></tr>
<tr class="separator:af729f1405c5c2a4fb43bc5f4d249bedf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3e16995fb09c32004824ce8be5d11045"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a3e16995fb09c32004824ce8be5d11045">Stop</a> (bool wait=false)</td></tr>
<tr class="memdesc:a3e16995fb09c32004824ce8be5d11045"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signal for the thread to stop running.  <a href="group__threads.html#a3e16995fb09c32004824ce8be5d11045">More...</a><br /></td></tr>
<tr class="separator:a3e16995fb09c32004824ce8be5d11045"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04d3a576997c17f058273831630cc394"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a04d3a576997c17f058273831630cc394">GetPriorityLevel</a> ()</td></tr>
<tr class="memdesc:a04d3a576997c17f058273831630cc394"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get this thread's priority level.  <a href="group__threads.html#a04d3a576997c17f058273831630cc394">More...</a><br /></td></tr>
<tr class="separator:a04d3a576997c17f058273831630cc394"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46f5f8800a58219817127784c75ed1ba"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a46f5f8800a58219817127784c75ed1ba">SetPriorityLevel</a> (int priority)</td></tr>
<tr class="memdesc:a46f5f8800a58219817127784c75ed1ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set this thread's priority level.  <a href="group__threads.html#a46f5f8800a58219817127784c75ed1ba">More...</a><br /></td></tr>
<tr class="separator:a46f5f8800a58219817127784c75ed1ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92c0628fe5ba0bb5bd3845bfb9718dc5"><td class="memItemLeft" align="right" valign="top">pthread_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a92c0628fe5ba0bb5bd3845bfb9718dc5">GetThreadID</a> ()</td></tr>
<tr class="memdesc:a92c0628fe5ba0bb5bd3845bfb9718dc5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get thread identififer.  <a href="group__threads.html#a92c0628fe5ba0bb5bd3845bfb9718dc5">More...</a><br /></td></tr>
<tr class="separator:a92c0628fe5ba0bb5bd3845bfb9718dc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a786ef18c62603f0fe041e95391637740"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a786ef18c62603f0fe041e95391637740">LockAffinity</a> (unsigned int cpu)</td></tr>
<tr class="memdesc:a786ef18c62603f0fe041e95391637740"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lock this thread to a CPU core.  <a href="group__threads.html#a786ef18c62603f0fe041e95391637740">More...</a><br /></td></tr>
<tr class="separator:a786ef18c62603f0fe041e95391637740"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Static Public Member Functions</h3></td></tr>
<tr class="memitem:ac1bccfcc9119d0c9f8dc95ef13175c74"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ac1bccfcc9119d0c9f8dc95ef13175c74">InitRealtime</a> ()</td></tr>
<tr class="memdesc:ac1bccfcc9119d0c9f8dc95ef13175c74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prime the system for realtime use.  <a href="group__threads.html#ac1bccfcc9119d0c9f8dc95ef13175c74">More...</a><br /></td></tr>
<tr class="separator:ac1bccfcc9119d0c9f8dc95ef13175c74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11087c8d97fc7b7c2ab37576acee61a3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a11087c8d97fc7b7c2ab37576acee61a3">GetMaxPriority</a> ()</td></tr>
<tr class="memdesc:a11087c8d97fc7b7c2ab37576acee61a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum priority level available.  <a href="group__threads.html#a11087c8d97fc7b7c2ab37576acee61a3">More...</a><br /></td></tr>
<tr class="separator:a11087c8d97fc7b7c2ab37576acee61a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc90bfb74a4f32b717c681a6a073f70a"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#adc90bfb74a4f32b717c681a6a073f70a">GetMinPriority</a> ()</td></tr>
<tr class="memdesc:adc90bfb74a4f32b717c681a6a073f70a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the minimum priority level avaiable.  <a href="group__threads.html#adc90bfb74a4f32b717c681a6a073f70a">More...</a><br /></td></tr>
<tr class="separator:adc90bfb74a4f32b717c681a6a073f70a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad69f498b3cbc8ec002238b74672b7aa2"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ad69f498b3cbc8ec002238b74672b7aa2">GetPriority</a> (pthread_t *thread=NULL)</td></tr>
<tr class="memdesc:ad69f498b3cbc8ec002238b74672b7aa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the priority level of the thread.  <a href="group__threads.html#ad69f498b3cbc8ec002238b74672b7aa2">More...</a><br /></td></tr>
<tr class="separator:ad69f498b3cbc8ec002238b74672b7aa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bebcec1fe0fc8b0c1e8010a15bf6493"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a4bebcec1fe0fc8b0c1e8010a15bf6493">SetPriority</a> (int priority, pthread_t *thread=NULL)</td></tr>
<tr class="memdesc:a4bebcec1fe0fc8b0c1e8010a15bf6493"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the priority level of the thread.  <a href="group__threads.html#a4bebcec1fe0fc8b0c1e8010a15bf6493">More...</a><br /></td></tr>
<tr class="separator:a4bebcec1fe0fc8b0c1e8010a15bf6493"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3013f9ed28496e937143b9807ba6bd72"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a3013f9ed28496e937143b9807ba6bd72">Yield</a> (unsigned int ms)</td></tr>
<tr class="memdesc:a3013f9ed28496e937143b9807ba6bd72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whatever thread you are calling from, yield the processor for the specified number of milliseconds.  <a href="group__threads.html#a3013f9ed28496e937143b9807ba6bd72">More...</a><br /></td></tr>
<tr class="separator:a3013f9ed28496e937143b9807ba6bd72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b944c18ba34a7fdb04dd65c754b6366"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a8b944c18ba34a7fdb04dd65c754b6366">SetAffinity</a> (unsigned int cpu, pthread_t *thread=NULL)</td></tr>
<tr class="memdesc:a8b944c18ba34a7fdb04dd65c754b6366"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lock the specified thread's affinity to a CPU core.  <a href="group__threads.html#a8b944c18ba34a7fdb04dd65c754b6366">More...</a><br /></td></tr>
<tr class="separator:a8b944c18ba34a7fdb04dd65c754b6366"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca2de16d52730f2c5f247b816ed1a064"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#aca2de16d52730f2c5f247b816ed1a064">GetCPU</a> ()</td></tr>
<tr class="memdesc:aca2de16d52730f2c5f247b816ed1a064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Look up which CPU core the thread is running on.  <a href="group__threads.html#aca2de16d52730f2c5f247b816ed1a064">More...</a><br /></td></tr>
<tr class="separator:aca2de16d52730f2c5f247b816ed1a064"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Static Protected Member Functions</h3></td></tr>
<tr class="memitem:a44f69c6f9bc3fe0899e48216d2dad3f6"><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a44f69c6f9bc3fe0899e48216d2dad3f6">DefaultEntry</a> (void *param)</td></tr>
<tr class="separator:a44f69c6f9bc3fe0899e48216d2dad3f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr><td colspan="2"><h3>Protected Attributes</h3></td></tr>
<tr class="memitem:a7599581878120ead1dd50636f3806afd"><td class="memItemLeft" align="right" valign="top">pthread_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#a7599581878120ead1dd50636f3806afd">mThreadID</a></td></tr>
<tr class="separator:a7599581878120ead1dd50636f3806afd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab34c3d6ae645c5aed480b86855b9253c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__threads.html#ab34c3d6ae645c5aed480b86855b9253c">mThreadStarted</a></td></tr>
<tr class="separator:ab34c3d6ae645c5aed480b86855b9253c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Constructor &amp; Destructor Documentation</h4>
<a id="a95c703fb8f2f27cb64f475a8c940864a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95c703fb8f2f27cb64f475a8c940864a">&#9670;&nbsp;</a></span>Thread()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Thread::Thread </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Default constructor. </p>

</div>
</div>
<a id="a026b23628e1727050e864e00489c0baf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a026b23628e1727050e864e00489c0baf">&#9670;&nbsp;</a></span>~Thread()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual Thread::~Thread </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Destructor. </p>
<p>Automatically stops the thread. </p>

</div>
</div>
<h4 class="groupheader">Member Function Documentation</h4>
<a id="a44f69c6f9bc3fe0899e48216d2dad3f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44f69c6f9bc3fe0899e48216d2dad3f6">&#9670;&nbsp;</a></span>DefaultEntry()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void* Thread::DefaultEntry </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>param</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="aca2de16d52730f2c5f247b816ed1a064"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca2de16d52730f2c5f247b816ed1a064">&#9670;&nbsp;</a></span>GetCPU()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static int Thread::GetCPU </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Look up which CPU core the thread is running on. </p>

</div>
</div>
<a id="a11087c8d97fc7b7c2ab37576acee61a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11087c8d97fc7b7c2ab37576acee61a3">&#9670;&nbsp;</a></span>GetMaxPriority()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static int Thread::GetMaxPriority </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the maximum priority level available. </p>

</div>
</div>
<a id="adc90bfb74a4f32b717c681a6a073f70a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc90bfb74a4f32b717c681a6a073f70a">&#9670;&nbsp;</a></span>GetMinPriority()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static int Thread::GetMinPriority </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the minimum priority level avaiable. </p>

</div>
</div>
<a id="ad69f498b3cbc8ec002238b74672b7aa2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad69f498b3cbc8ec002238b74672b7aa2">&#9670;&nbsp;</a></span>GetPriority()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static int Thread::GetPriority </td>
          <td>(</td>
          <td class="paramtype">pthread_t *&#160;</td>
          <td class="paramname"><em>thread</em> = <code>NULL</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the priority level of the thread. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">thread</td><td>The thread, or if NULL, the currently running thread. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a04d3a576997c17f058273831630cc394"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04d3a576997c17f058273831630cc394">&#9670;&nbsp;</a></span>GetPriorityLevel()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int Thread::GetPriorityLevel </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get this thread's priority level. </p>

</div>
</div>
<a id="a92c0628fe5ba0bb5bd3845bfb9718dc5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a92c0628fe5ba0bb5bd3845bfb9718dc5">&#9670;&nbsp;</a></span>GetThreadID()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_t* Thread::GetThreadID </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get thread identififer. </p>

</div>
</div>
<a id="ac1bccfcc9119d0c9f8dc95ef13175c74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1bccfcc9119d0c9f8dc95ef13175c74">&#9670;&nbsp;</a></span>InitRealtime()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void Thread::InitRealtime </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prime the system for realtime use. </p>
<p>Mostly this is locking a large group of pages into memory. </p>

</div>
</div>
<a id="a786ef18c62603f0fe041e95391637740"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a786ef18c62603f0fe041e95391637740">&#9670;&nbsp;</a></span>LockAffinity()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool Thread::LockAffinity </td>
          <td>(</td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>cpu</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Lock this thread to a CPU core. </p>

</div>
</div>
<a id="ac852bc49c5bf8c2f448e4df85b1a4cae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac852bc49c5bf8c2f448e4df85b1a4cae">&#9670;&nbsp;</a></span>Run()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void Thread::Run </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>User-implemented thread main() function. </p>

</div>
</div>
<a id="a8b944c18ba34a7fdb04dd65c754b6366"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b944c18ba34a7fdb04dd65c754b6366">&#9670;&nbsp;</a></span>SetAffinity()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static bool Thread::SetAffinity </td>
          <td>(</td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>cpu</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">pthread_t *&#160;</td>
          <td class="paramname"><em>thread</em> = <code>NULL</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Lock the specified thread's affinity to a CPU core. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">cpu</td><td>The CPU core to lock the thread to. </td></tr>
    <tr><td class="paramname">thread</td><td>The thread, or if NULL, the currently running thread. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a4bebcec1fe0fc8b0c1e8010a15bf6493"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4bebcec1fe0fc8b0c1e8010a15bf6493">&#9670;&nbsp;</a></span>SetPriority()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static int Thread::SetPriority </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>priority</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">pthread_t *&#160;</td>
          <td class="paramname"><em>thread</em> = <code>NULL</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the priority level of the thread. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">thread</td><td>The thread, or if NULL, the currently running thread. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a46f5f8800a58219817127784c75ed1ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46f5f8800a58219817127784c75ed1ba">&#9670;&nbsp;</a></span>SetPriorityLevel()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool Thread::SetPriorityLevel </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>priority</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set this thread's priority level. </p>

</div>
</div>
<a id="a279c2b78aa2bf43371f2462623588830"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a279c2b78aa2bf43371f2462623588830">&#9670;&nbsp;</a></span>Start() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool Thread::Start </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Start the thread. </p>
<p>This will asynchronously call the <a class="el" href="group__threads.html#ac852bc49c5bf8c2f448e4df85b1a4cae" title="User-implemented thread main() function.">Run()</a> function. </p><dl class="section return"><dt>Returns</dt><dd>False if an error occurred and the thread could not be started. </dd></dl>

</div>
</div>
<a id="af729f1405c5c2a4fb43bc5f4d249bedf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af729f1405c5c2a4fb43bc5f4d249bedf">&#9670;&nbsp;</a></span>Start() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool Thread::Start </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__threads.html#gaf5d0ae569fdc16f5708d68f64457ed79">ThreadEntryFunction</a>&#160;</td>
          <td class="paramname"><em>entry</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>user_param</em> = <code>NULL</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Start the thread, utilizing an entry function pointer provided by the user. </p>
<dl class="section return"><dt>Returns</dt><dd>False if an error occurred and the thread could not be started. </dd></dl>

</div>
</div>
<a id="a3e16995fb09c32004824ce8be5d11045"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e16995fb09c32004824ce8be5d11045">&#9670;&nbsp;</a></span>Stop()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void Thread::Stop </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>wait</em> = <code>false</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Signal for the thread to stop running. </p>
<p>If wait is true, <a class="el" href="group__threads.html#a3e16995fb09c32004824ce8be5d11045" title="Signal for the thread to stop running.">Stop()</a> will block until the thread has exited. </p>

</div>
</div>
<a id="a3013f9ed28496e937143b9807ba6bd72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3013f9ed28496e937143b9807ba6bd72">&#9670;&nbsp;</a></span>Yield()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void Thread::Yield </td>
          <td>(</td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>ms</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Whatever thread you are calling from, yield the processor for the specified number of milliseconds. </p>
<p>Accuracy may vary wildly the lower you go, and depending on the platform. </p>

</div>
</div>
<h4 class="groupheader">Member Data Documentation</h4>
<a id="a7599581878120ead1dd50636f3806afd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7599581878120ead1dd50636f3806afd">&#9670;&nbsp;</a></span>mThreadID</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pthread_t Thread::mThreadID</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ab34c3d6ae645c5aed480b86855b9253c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab34c3d6ae645c5aed480b86855b9253c">&#9670;&nbsp;</a></span>mThreadStarted</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Thread::mThreadStarted</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="gaf5d0ae569fdc16f5708d68f64457ed79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf5d0ae569fdc16f5708d68f64457ed79">&#9670;&nbsp;</a></span>ThreadEntryFunction</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef void*(* ThreadEntryFunction) (void *user_param)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Function pointer typedef representing a thread's main entry point. </p>
<p>A user-defined parameter is passed through such that the user can pass data or other value to their thread so that it can self-identify. </p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Tue Mar 28 2023 14:27:58 for Jetson Inference by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
